B07【多链路问题】生成树协议之MSTP与其他技术概要
前言
STP是一个相对老旧的标准,RSTP虽然在STP的基础上进行了一定程度的优化,但是依然与STP一样存在一个较大的短板,即其基本原理是将环路中的某个或者某些接口进行阻塞,这将直接导致被阻塞的链路无法承载业务流量,从而造成网络资源的浪费,而且还有可能造成部分VLAN的报文无法转发。
MSTP在这方面进行了改良,MSTP增加了对vlan技术的识别,通过生成多棵树使得不同 VLAN 的流量可以在不同的链路上进行负载分担。
不过对于单个VLAN而言,始终存在某条或者某些链路无法承载其流量的情况。因此在现代园区网络中,还有许多其他技术或者解决方案已经被用于替代生成树技术。
这就是后面会介绍的smart link、堆叠与集群,甚至未来介绍的VRRP也可以算这类解决方案。
MSTP
为了弥补STP和RSTP的缺陷,IEEE于2002年发布的802.1s标准定义了MSTP(Multiple Spanning Tree Protocol,多生成树协议)。
MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。
MSTP是由RSTP升级而来的,RSTP持有的原理与特性MSTP都持有并且也一致,因此不再做介绍,本文着重介绍MSTP中的“M”(多实例、多生成树)。
此外,关于MSTP是如何基于实例/vlan进行生成树计算的,大体上也是基于BPDU进行比较优先级等信息,但碍于篇幅,本文也不做介绍。
概念
在以太网中部署MSTP协议后可实现如下功能:
- 形成多棵无环路的树,解决广播风暴并实现冗余备份。
- 多棵生成树在VLAN间实现负载均衡,不同VLAN的流量按照不同的路径转发。
如果以某一个vlan为视角,则它眼中只存在一棵生成树。
MSTP可以将整个二层网络划分为多个MST域,并将每个MST域作为单台交换设备对待,在MST域间通过计算生成CST(Common Spanning Tree,公共生成树)。
在MST域内,MSTP根据VLAN和生成树实例的映射关系,针对不同的VLAN生成不同的生成树实例MSTI(Multiple Spanning Tree Instance)。
其中实例0的MSTI称为IST(Internal Spanning Tree,内部生成树),一般默认所有vlan都处于实例0内。
所有MST域的IST加上CST就构成一棵完整的生成树,即CIST(Common and Internal Spanning Tree,公共和内部生成树)。
一般来说,只使用一个MSTI域即可。
具体情况等我们介绍案例就能明白了,先看一下配置命令。
配置
执行命令system-view,进入系统视图。
执行命令stp enable,使能交换设备的生成树功能。
默认情况下,设备的生成树功能处于启用状态。
执行命令stp mode mstp,配置交换设备生成树协议的工作模式为MSTP。
默认情况下,交换设备的工作模式为MSTP。
执行命令stp region-configuration,进入MST域视图。
执行命令region-name name,配置MST域的域名。
默认情况下,MST域的域名等于交换设备桥MAC的MAC地址。
选择执行以下两个步骤中的其中一个,配置多生成树实例与VLAN的映射关系。
- 执行命令instance instance-id vlan { vlan-id1 [ to vlan-id2 ] },手动配置多生成树实例和VLAN的映射关系。
- 执行命令vlan-mapping modulo modulo,配置多生成树实例和VLAN按照缺省算法自动分配映射关系。
默认情况下,MST域内所有的VLAN都映射到生成树实例0。
vlan-mapping modulo modulo是指VLAN ID减1后除以modulo值的余数再加1,即(VLAN ID-1)%modulo+1。通过此算法来分配到对应的实例中,即余数加1为几就将此VLAN分配到实例几中。
当需要配置生成树实例与MUX VLAN间的映射关系时,建议同一个MUX VLAN下的主VLAN、互通型和隔离型从VLAN配置在同一个生成树实例下,否则可能导致部分环路。
一般建议使用手动配置。
(可选)执行命令revision-level level,配置MST域的MSTP修订级别。
默认情况下,MST域的MSTP修订级别为0。
MSTP是标准协议,各厂商设备的MSTP修订级别一般都默认为0。
如果某厂商的设备不为0,为保持MST域内计算,在部署MSTP时,需要将各设备的MSTP修订级别修改为一致。
执行命令active region-configuration,激活MST域的配置,使以上配置生效。如果不执行本操作,以上配置无法生效。
如果在激活后又修改了交换设备的MST域相关参数,可再次执行该命令以使修改后的参数生效。
修改MST域配置时,在执行active region-configuration前,请先执行check region-configuration,确定未生效的域参数配置是否正确;在执行active region-configuration后,请关注设备上是否有激活失败的提示信息,如果有激活失败的提示信息,请重新进行MST域配置以确保配置正确。
如果要指定根桥与备份根桥:
执行命令system-view,进入系统视图。
(可选)执行命令stp [ instance instance-id ] root primary,配置当前设备为根桥设备。
配置后该设备优先级值自动为0,将不能更改设备优先级。
如果不指定instance,则配置设备在实例0上为根桥设备。
(可选)执行命令stp [ instance instance-id ] root secondary,配置当前交换设备为备份根桥设备。
配置后该设备优先级值自动为4096,将不能更改设备优先级。
如果不指定instance,则配置设备在实例0上为备份根桥设备。
案例

现使用四台交换机互联,链路上放行的vlan如图所示,再配置右侧的MSTP命令。
我们使用display stp brief命令检查一下当前MSTP的状态信息。
[MSTID]为前面配置的实例;[Role]为端口的状态,我们前面在STP/RSTP中学习过的[ROOT]:根端口、[DESI]:指定端口、[ALTE]:备用端口(阻塞端口)。
1 | [SW1]display stp brief |
1 | [SW2]display stp brief |
1 | [SW3]display stp brief |
1 | [SW4]display stp brief |
根据以上的状态信息,我们可以知道MSTP将拓扑生成出了以下五个MSTI:

实例0的MSTI树用于未划vlan或者未处于其他实例中的vlan的数据传输。
实例1为vlan10使用的,实例2为vlan20使用的,实例3为vlan30使用的,实例4为vlan40使用的。
Smart Link和Monitor Link
虽然MSTP很好用,但它作为生成树协议,它还有一个短板——其收敛速度依旧有限,不能尽量保证业务通信无感知,接下来介绍一个更为有效的技术。
Smart Link,又叫做备份链路。一个Smart Link由两个接口组成,其中一个接口作为另一个的备份。
Smart Link常用于双上行组网(也就是成“v”状,一台设备连接了两台设备),提供可靠高效的备份和快速的切换机制。
Smart Link技术有以下优点:
- 能够实现在双上行组网的两条链路正常情况下,一条链路处于转发状态,而另一条处于阻塞待命状态,从而可避免环路的不利影响。
- 配置和使用更为简洁,便于用户操作。
- 当主用链路发生故障后,流量会在毫秒级的时间内迅速切换到备用链路上,极大限度地保证了数据的正常转发。
在一些组网中,Smart Link无法监视到上行接口的状态,从而导致拓扑协议无法进行链路切换。
Monitor Link组也叫监控链路组,由上行接口和下行接口共同组成;它通过监控设备的上行接口,根据其Up/Down状态的变化来触发下行接口Up/Down状态的变化
因而可以在相连的上行设备上配置Monitor Link,通过监控上行链路对下行链路进行同步设置,达到上行链路故障迅速传达给下行设备,从而触发下游设备上的Smart Link进行链路的切换,防止长时间因上行链路故障而出现流量丢失。

如图所示,对于SW4来说,配置连接SW2与SW3的两台链路为一个Smart Link。实现使用主链路通信,备用链路堵塞;当SW4检查到主链路故障时,切换为备用链路。
但如果故障点在SW1与SW2的链路上(假设SW2与SW4的链路为Smart Link的主链路),那么SW4是无法检查到该故障,依旧会使用主链路进行通信。
而在SW2与SW3上配置Monitor Link后,当它们发现与SW1的链路发生故障后,就会将与SW4相连的接口关闭,从而让SW4发现链路故障,进而触发Smart Link的主备切换。
如果在同一个组网中,同一时刻双上行链路中只有一条处于转发状态,另一条链路不承载流量,则链路利用率只有50%。
Smart Link支持负载分担实例,可以配置指定实例对应的VLAN数据通过备用链路进行转发(其他vlan流量从主链路转发),使得主链路和备份链路承载不同VLAN数据流量的转发,达到负载分担的目的。
配置
Smart Link
注意:如果要配置Smart Link,要先进去对应的接口下执行命令stp disable关闭当前接口的STP功能。
如果不关闭接口的STP功能,接口将无法加入Smart Link组。
基本功能配置:
执行命令system-view,进入系统视图。
执行命令smart-link group group-id,创建并进入Smart Link组视图。设备最多支持创建16个Smart Link组。
(可选)执行命令protected-vlan reference-instance { instance-id1 [ to instance-id2 ] },配置Smart Link组保护实例。
配置了Smart Link组的保护实例之后,Smart Link功能只对保护实例中映射的VLAN数据有效。
如果不配置Smart Link组绑定保护实例,则Smart Link功能对所有VLAN数据有效。
执行命令port interface-type interface-number master,将指定接口加入Smart Link组,并配置为主接口。
执行命令port interface-type interface-number slave,将指定接口加入Smart Link组,并配置为从接口。
一个Smart Link组包括一个主接口和一个从接口。
(可选)执行命令smart-link hold-time hold-time,配置Smart Link倒换的延时时间。
默认情况下,延时时间为0秒,即立刻倒换。
(可选)执行命令restore enable,使能Smart Link组的回切功能。
默认情况下,Smart Link组回切功能处于关闭状态。
当Smart Link组中主链路出现故障时,会自动倒换到备链路。
当原主链路故障恢复后,为了保持流量稳定,它将维持在阻塞状态,不进行抢占。
(可选)执行命令timer wtr wtr-time,设置Smart Link组回切时间。
默认情况下,Smart Link组回切时间为60秒。
执行命令smart-link enable,启用Smart Link组功能。
负载分担配置:
执行命令system-view,进入系统视图。
执行命令stp region-configuration,进入MST域视图。
执行命令instance instance-id vlan { vlan-id1 [ to vlan-id2 ] },配置实例和VLAN的映射关系。
默认情况下,所有的VLAN都映射到Instance 0。且Instance 0为默认配置,不需要创建。
执行命令active region-configuration,激活MST域的配置。
执行命令quit,返回系统视图。
执行命令smart-link group group-id,进入Smart Link组视图。
执行命令load-balance instance { instance-id1 [ to instance-id2 ] } slave,用来配置该实例绑定的VLAN报文从备用接口发送,实现负载分担方式。
Monitor Link
执行命令system-view,进入系统视图。
执行命令monitor-link group group-id,创建并进入Monitor Link组视图。
执行命令port interface-type interface-number uplink ,配置单接口为Monitor link组的上行接口。
或者执行命令smart-link group group-id uplink,配置Smart Link组为Monitor Link组的上行链路。
如果要将Smart Link组加入到Monitor Link组中,需要先将Monitor Link组中已经存在的上行链路接口删除。
执行命令port interface-type interface-number downlink [ downlink-id ] ,配置单接口为Monitor link组的下行接口。
(可选)执行命令timer recover-time recover-time,配置自动回切时间。
默认情况下,Monitor Link组的回切功能处于启用状态,且默认回切时间为3秒。
案例

以图中拓扑为例,SW4将上行到SW2与SW3的链路加入Smart Link组,并选择SW2为主链路。
为了避免上行交换机的上行链路故障,SW4无法发现并切换链路;在上行交换机上配置Monitor Link。
另外SW的上行链路也有两条,因此也配置为Smart Link组。
先配置SW4的Smart Link:
1 | <Huawei>system-view |
配置SW3的Monitor Link:
1 | <Huawei>system-view |
配置SW2的Smart Link和Monitor Link:
1 | <Huawei>system-view |
堆叠与集群
本文仅接受堆叠与集群的概念,暂不介绍具体的原理与配置。
堆叠Stack是指将多台支持堆叠特性的交换机通过堆叠线缆连接在一起,从逻辑上变成一台交换设备,作为一个整体参与数据转发。
而集群CSS (Cluster Switch System)与堆叠类似,只是集群是特指用于框式交换机上的技术。

该拓扑只是介绍概念,实际现网不会这么连接,因为如果交换机A故障了,那么交换机A下的用户就断网了。
一般来说,堆叠都是使用在汇聚层/核心层交换机上,下行的交换机连接着堆叠组的交换机;这样配置堆叠后,再使用链路聚合即可达到冗余备份与带宽提高的目标。

整体上看,在中大型企业网络结构中,堆叠/集群的应用如下:

堆叠与集群是属于交换设备上的,在路由设备上也有类似的方案——VRRP,这个我们之后单独介绍。